/**
 * 张三和李四工作日中午去面馆吃面，面馆的价格如下：
 * 大碗中碗小碗牛肉面分别18元16元14元，
 * 大碗中碗小碗肥肠面分别20元18元16元，
 * 牛肉饼10元，
 * 奶茶12元，
 * 套餐1是38元（1大碗牛肉面+1个牛肉饼+1杯奶茶），
 * 套餐2是40元（1大碗肥肠面+1个牛肉饼+1杯奶茶） ，
 * 张三吃了套餐1+1个牛肉饼，
 * 李四吃了一碗中碗的肥肠面+2杯奶茶（面馆工作日不打折，节假日会有的活动），
 * 请用使用java实现张三和李四分别要向面馆付款多少钱的代码逻辑。
 */

// 以下是js实现

/**
 * 食品类
 */
class Foodstuff {
    // 类的构造方法
    constructor(obj) {
        if (typeof obj === 'object') {
            this._constructorComplex(obj);
        } else {
            throw new Error('The data type is incorrect!');
        }
    }
    _constructorComplex (data) {
        // 食品名称
        this.name = data.name;
        // 食品数量
        this.amount = typeof data.amount === 'number' ? data.amount : 1;
        // 食品大小
        this.size = data.size;
        // 折扣
        this.discount = data.discount;
    }

    // 食品价格
    price;
    // 牛肉面价格map
    beefNoodlesMap = new Map([['large', 18], ['mid', 16], ['small', 14]]);
    // 肥肠面价格map
    sausageNoodlesMap = new Map([['large', 20], ['mid', 18], ['small', 16]]);

    // 计算食品价格
    priceMethod() {
        switch (this.name) {
            case 'beefNoodles':
                this.price = this.beefNoodlesMap.get(this.size) * this.amount;
                break;
            case 'sausageNoodles':
                this.price = this.sausageNoodlesMap.get(this.size) * this.amount;
                break;
            case 'beefPatties':
                this.price = 10 * this.amount;
                break;
            case 'milkTea':
                this.price = 12 * this.amount;
                break;
            case 'comboOne':
                this.price = 38 * this.amount;
                break;
            case 'comboTwo':
                this.price = 40 * this.amount;
                break;
            default:
                throw new Error('No Food Found ! Please Select Again !');
        }
        return this.price;
    }
}
// 异常测试
// let exception1 = new Foodstuff('name').priceMethod();
// let exception2 = new Foodstuff({'name': '123'}).priceMethod();
// 张三吃了套餐1 + 1个牛肉饼
let zhangsanPrice = new Foodstuff({'name': 'comboOne'}).priceMethod() + new Foodstuff({'name': 'beefPatties'}).priceMethod()
console.log('张三吃了套餐1 + 1个牛肉饼的总价为：', zhangsanPrice)
// 李四吃了一碗中碗的肥肠面+2杯奶茶
let lisiPrice = new Foodstuff({'name': 'sausageNoodles', 'size': 'mid'}).priceMethod() + new Foodstuff({'name': 'milkTea', 'amount': 2}).priceMethod()
console.log('李四吃了一碗中碗的肥肠面+2杯奶茶的总价为：', lisiPrice)